#include "trap.h"
   .set noat                # 禁止使用$at寄存器
   .globl main
   .data     
wdata:  .word 0xFFFFFFFF, 0x12345678, 0x2468ACE0, 0x33333333, 0xFEDCBA98, 0x87654321
hdata:  .half 0xFFFF, 0xFEFE, 0x1234, 0x7777
bdata:  .byte 0x01, 0xFE, 0xFF, 0x89
udata:  .space 11                 # 预留11字节未初始化空间
wdata1: .word 0x12345678, 0xFFABCDEF

   .text
main: 
    # 初始化寄存器
    lui     $a0, 0x1000           # $a0 = 0x10000000 (基地址)
    lui     $a1, 0xFFFF           # $a1 = 0xFFFF0000
    lui     $a2, 0x1000           # $a2 = 0x10000000
    addi    $a1, $a1, 0x6FFF      # $a1 = 0xFFFF6FFF
    addi    $s1, $zero, 0x2       # $s1 = 2

    # 加载字、半字和字节
    lw      $t0, 0($a0)           # 加载wdata[0]到$t0
    lw      $t1, 4($a0)           # 加载wdata[1]到$t1
    lh      $t2, 6($a0)           # 加载wdata[1]的低半字到$t2
    lh      $t3, 22($a0)          # 加载偏移22的半字到$t3
    lh      $t4, 20($a0)          # 加载偏移20的半字到$t4
    lhu     $t5, 6($a0)           # 加载无符号半字到$t5
    lhu     $t6, 22($a0)          # 加载偏移22的无符号半字到$t6
    lhu     $t7, 20($a0)          # 加载偏移20的无符号半字到$t7
    lb      $t2, 16($a0)          # 加载偏移16的字节到$t2
    lb      $t3, 23($a0)          # 加载偏移23的字节到$t3
    lb      $t4, 32($a0)          # 加载偏移32的字节到$t4
    lbu     $t5, 16($a0)          # 加载无符号字节到$t5
    lbu     $t6, 23($a0)          # 加载无符号字节到$t6
    lbu     $t7, 32($a0)          # 加载无符号字节到$t7

    # 存储字到内存
    sw      $t0, 4($a0)           # 存储$t0到偏移4位置
    sw      $t1, 0($a0)           # 存储$t1到偏移0位置
    lw      $t0, 0($a0)           # 再次加载偏移0位置
    lw      $t1, 4($a0)           # 再次加载偏移4位置

    # 存储半字到内存
    sh      $t2, 20($a0)          # 存储$t2到偏移20位置
    sh      $t3, 16($a0)          # 存储$t3到偏移16位置
    lw      $t0, 20($a0)          # 加载偏移20位置的字
    lw      $t1, 16($a0)          # 加载偏移16位置的字

    # 存储字节到内存
    sb      $t4, 16($a0)          # 存储$t4到偏移16位置
    sb      $t5, 42($a0)          # 存储$t5到偏移42位置
    lw      $t0, 16($a0)          # 加载偏移16位置的字
    lw      $t1, 40($a0)          # 加载偏移40位置的字

    # 程序结束
    HIT_GOOD_TRAP                 # 停止模拟器